#include "mainwidget.h"
#include "./ui_mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    ui->setupUi(this);
    //初始化窗口标题栏
    this->setWindowTitle("我的聊天室");
    this->setWindowIcon(QIcon(":/image/logo.png"));

    //初始化窗口
    initUI();

    //初始化信号槽
    initSignalSlot();

    //初始化websocket
    initWebsocket();

}
MainWidget* MainWidget::instance = nullptr;

MainWidget* MainWidget::getInstance()
{
    if(instance == nullptr)
    {
        instance = new MainWidget();
    }
    return instance;
}

MainWidget::~MainWidget() {}

///////////////////////////////////////////////////////////////
///初始化所有窗口函数
////////////////////////////////////////////////////////////////

void MainWidget::initUI()
{
    initMainWindow();
    initWindowLeft();
    initWindowMid();
    initWindowRight();

#if test
    Toast::showMessage("测试弹窗");
#endif
}
///////////////////////////////////////////////////////////////
///初始化主窗口函数
////////////////////////////////////////////////////////////////
void MainWidget::initMainWindow()
{
    //设置水平布局管理器
    QHBoxLayout* layout = new QHBoxLayout();
    //设置间距
    layout->setContentsMargins(0,0,0,0);
    layout->setSpacing(0);
    this->setLayout(layout);

    //创建左中右Widget
    leftWidget = new QWidget();
    midWidget = new QWidget();
    rightWidget = new QWidget();

    //设置Widget对象名称
    leftWidget->setObjectName("leftWidget");
    midWidget->setObjectName("midWidget");
    rightWidget->setObjectName("rightWidget");

    //设置Widget对象尺寸
    leftWidget->setFixedWidth(55);//左侧定宽
    midWidget->setFixedWidth(200);//中间定宽
    rightWidget->setMinimumWidth(450); //右侧最小宽度

    //添加widget到布局管理器中
    layout->addWidget(leftWidget);
    layout->addWidget(midWidget);
    layout->addWidget(rightWidget);

    //设置样式
    QString sl("#leftWidget {background-color:rgb(46,46,46);}");
    QString sw("#midWidget {background-color:rgb(247,247,247);}");
    QString sr("#rightWidget {background-color:rgb(245,245,245);}");
    this->setStyleSheet(sl + sw + sr);
}
///////////////////////////////////////////////////////////////
///初始化左窗口函数
////////////////////////////////////////////////////////////////
void MainWidget::initWindowLeft()
{
    //设置垂直布局管理器
    QVBoxLayout* layout = new QVBoxLayout();
    //设置间距
    layout->setContentsMargins(0,30,0,0);
    layout->setSpacing(10);
    leftWidget->setLayout(layout);

    //初始化各标签控件
    userBtn = new QPushButton();
    sessionTabBtn = new QPushButton();
    friendTabBtn = new QPushButton();
    applyTabBtn = new QPushButton();

    userBtn->setFixedSize(35,35);
    userBtn->setIconSize(QSize(35,35));
    userBtn->setIcon(QIcon(":/image/defaultAvatar.png"));
    userBtn->setStyleSheet("QPushButton{background-color: transparent;}");
    userBtn->setCursor(Qt::PointingHandCursor);

    layout->addWidget(userBtn,1,Qt::AlignTop | Qt::AlignHCenter);

    sessionTabBtn->setFixedSize(35,35);
    sessionTabBtn->setIconSize(QSize(35,35));
    sessionTabBtn->setIcon(QIcon(":/image/session_inactive.png"));
    sessionTabBtn->setStyleSheet("QPushButton{background-color: transparent;}");
    sessionTabBtn->setCursor(Qt::PointingHandCursor);

    layout->addWidget(sessionTabBtn,1,Qt::AlignTop | Qt::AlignHCenter);

    friendTabBtn->setFixedSize(35,35);
    friendTabBtn->setIconSize(QSize(35,35));
    friendTabBtn->setIcon(QIcon(":/image/friend_inactive.png"));
    friendTabBtn->setStyleSheet("QPushButton{background-color: transparent;}");
    friendTabBtn->setCursor(Qt::PointingHandCursor);

    layout->addWidget(friendTabBtn,1,Qt::AlignTop | Qt::AlignHCenter);

    applyTabBtn->setFixedSize(35,35);
    applyTabBtn->setIconSize(QSize(35,35));
    applyTabBtn->setIcon(QIcon(":/image/apply_inactive.png"));
    applyTabBtn->setStyleSheet("QPushButton{background-color: transparent;}");
    applyTabBtn->setCursor(Qt::PointingHandCursor);

    layout->addWidget(applyTabBtn,1,Qt::AlignTop | Qt::AlignHCenter);

    //底部添加空白, 将控件挤上去
    layout->addStretch(20);

    //添加信号槽关联, 实现在初始化信号槽函数中
}
///////////////////////////////////////////////////////////////
///切换页面函数
////////////////////////////////////////////////////////////////
void MainWidget::loadSessionList()
{
    DataCenter* dataCenter = DataCenter::getInstance();
    if(dataCenter->getChatSessionList() != nullptr)
    {
        updateChatSessionList();
    }
    else
    {
        connect(dataCenter,&DataCenter::getChatSessionListDone,this,&MainWidget::updateChatSessionList,Qt::UniqueConnection);
        dataCenter->getChatSessionListAsync();
    }
}

void MainWidget::loadFriendList()
{
    DataCenter* dataCenter = DataCenter::getInstance();

    if(dataCenter->getFriendList() != nullptr)
    {
        updateFriendList();

    }
    else
    {
        connect(dataCenter,&DataCenter::getFriendListDone,this,&MainWidget::updateFriendList,Qt::UniqueConnection);
        dataCenter->getFriendListAsync();
    }


}

void MainWidget::loadApplyList()
{
    DataCenter* dataCenter = DataCenter::getInstance();

    if(dataCenter->getApplyList() != nullptr)
    {
        updateApplyList();
    }
    else
    {
        connect(dataCenter,&DataCenter::getApplyListDone,this,&MainWidget::updateApplyList,Qt::UniqueConnection);
        dataCenter->getApplyListAsync();
    }
}

void MainWidget::loadRecentMessage(const QString &chatSessionId)
{
    DataCenter* dataCenter = DataCenter::getInstance();

    if(dataCenter->getRecentMessages(chatSessionId) != nullptr)
    {
        updateRecentMessage(chatSessionId);
    }
    else
    {
        connect(dataCenter,&DataCenter::getRecentMessageListDone,this,&MainWidget::updateRecentMessage,Qt::UniqueConnection);
        dataCenter->getRecentMessagesAsync(chatSessionId,true);
    }
}

void MainWidget::switchSession(const QString &userId)
{
    //找到对应会话元素
    DataCenter* dataCenter = DataCenter::getInstance();

    ChatSessionInfo* it = dataCenter->findChatSessionByUserId(userId);

    if(it != nullptr)
    {
        //置顶会话
        dataCenter->topChatSessionInfo(*it);

        //切换到会话标签页
        switchTabToSession();

        //加载会话消息
        sessionFriendArea->clickItem(0);
    }
    else
    {
        //正常情况下, 一个好友哪怕没说过话, 也应当存在对应的会话信息,所以这里如果未找到, 则直接视为出错
        LOG() << "MainWidget::switchSession 失败! 错误原因: 未找到userId对应的好友ChatSessionInfo信息";
        return;
    }
}

///////////////////////////////////////////////////////////////
///初始化中窗口函数
////////////////////////////////////////////////////////////////

void MainWidget::initWindowMid()
{
    //设置网格布局管理器
    QGridLayout* layout = new QGridLayout();

    //设置间距
    layout->setContentsMargins(0,20,0,0);
    layout->setHorizontalSpacing(0);
    layout->setVerticalSpacing(10);
    midWidget->setLayout(layout);
    //去除默认边框,防止影响之后布局
    midWidget->setStyleSheet("QWidget{border:none;}");

    //搜索框
    searchEdit = new QLineEdit();
    searchEdit->setFixedSize(140,25);
    searchEdit->setPlaceholderText("搜索");
    searchEdit->setStyleSheet("QLineEdit{background-color:rgb(226,226,226); border:none; border-radius:5px; padding-left:5px;}");


    //加号
    addBtn = new QPushButton();
    addBtn->setFixedSize(25,25);
    addBtn->setIconSize(QSize(20,20));
    addBtn->setIcon(QIcon(":/image/cross.png"));
    addBtn->setStyleSheet("QPushButton{background-color:rgb(226,226,226);} QPushButton:hover{background-color:rgb(209,209,209);}");


    //好友会话
    sessionFriendArea = new SessionFriendArea();

    //添加空白widget, 控制边距
    QWidget* spacer1 = new QWidget();
    QWidget* spacer2 = new QWidget();
    QWidget* spacer3 = new QWidget();
    spacer1->setFixedWidth(10);
    spacer2->setFixedWidth(10);
    spacer3->setFixedWidth(10);

    layout->addWidget(spacer1,0,0);
    layout->addWidget(searchEdit,0,1);
    layout->addWidget(spacer2,0,2);
    layout->addWidget(addBtn,0,3);
    layout->addWidget(spacer3,0,4);
    layout->addWidget(sessionFriendArea, 1, 0, 1, 5);

    //添加好友界面相关逻辑, 信号槽实现在初始化信号槽函数中

}
///////////////////////////////////////////////////////////////
///初始化右窗口函数
////////////////////////////////////////////////////////////////

void MainWidget::initWindowRight()
{
    //设置布局管理器以及相关样式
    QVBoxLayout* layout = new QVBoxLayout();
    layout->setContentsMargins(0,0,0,0);
    layout->setSpacing(0);
    rightWidget->setLayout(layout);

    //创建标题栏
    QWidget* titleWidget = new QWidget();

    //设置标题对象名称, 方便后续设置样式(直接使用类选择器可能导致问题)
    titleWidget->setObjectName("titleWidget");
    titleWidget->setFixedHeight(60);
    titleWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
    titleWidget->setStyleSheet("#titleWidget {background-color:rgb(245,245,245); border-bottom: 1px solid rgb(231,231, 231);}");
    layout->addWidget(titleWidget,0,Qt::AlignTop);
    //初始化标题栏
    initWindowRightOfTitle(titleWidget);

    //创建消息展示区
    messageShowArea = new MessageShowArea();
    layout->addWidget(messageShowArea);

    //创建消息编辑区
    messageEditArea = new MessageEditArea(this);
    layout->addWidget(messageEditArea,0,Qt::AlignBottom);

#ifdef test

    for(int i = 0; i<10;i++)
    {
        model::UserInfo userinfo;

        userinfo.userIcon = QIcon(":/image/cross.png");
        userinfo.userId = QString::number(1076 + i);
        userinfo.userName = QString("张三") + QString::number(i);
        userinfo.userPhone = "123456789";
        userinfo.userSignature = QString::number(i) + "的个性签名";

        model::Message message = model::Message::makeTextMessage(userinfo,QString(" 代码中用const_cast删除了变量a的地址的const属性，这时就可以通过这个指针来修改变量a的值。\
- 由于编译器认为const修饰的变量是不会被修改的，因此会将const修饰的变量存放到寄存器当中，当需要读取const变量时就会直接从寄存器中进行读取，而我们修改的实际上是内存中的a的值，因此最终打印出a的值是未修改之前的值。\
- 如果不想让编译器将const变量优化到寄存器当中，可以用volatile关键字对const变量进行修饰，这时当要读取这个const变量时编译器就会从内存中进行读取，即保持了该变量在内存中的可见性。").toUtf8(),QString::number(i + 999));

        messageShowArea->addFrontMessage(i % 2 == 0, message);
    }
#endif

}

void MainWidget::initWindowRightOfTitle(QWidget* titleWidget)
{
    //创建水平布局管理器并设置
    QHBoxLayout* layout = new QHBoxLayout();
    layout->setContentsMargins(20,0,10,0);
    layout->setSpacing(0);
    titleWidget->setLayout(layout);

    //创建标题控件,标题显示
    sessionTitle = new QLabel();
    sessionTitle->setStyleSheet("QLabel { font-size: 15px; }");
    layout->addWidget(sessionTitle);
#ifdef test
    sessionTitle->setText("这⾥是会话标题");
#endif

    //创建按钮控件,点击显示会话详情窗口
    sessionDetailsBtn = new QPushButton();
    sessionDetailsBtn->setFixedSize(20,20);
    sessionDetailsBtn->setIconSize(QSize(20,20));
    sessionDetailsBtn->setIcon(QIcon(":/image/more.png"));
    sessionDetailsBtn->setStyleSheet("QPushButton{border:none;}");
    sessionDetailsBtn->setCursor(Qt::PointingHandCursor);
    layout->addWidget(sessionDetailsBtn,0,Qt::AlignRight);

    //信号槽实现在初始化信号槽函数中

}

void MainWidget::initSignalSlot()
{
    ////////////////////////////////////////////////////////////////
    ///实例化dataCenter
    ////////////////////////////////////////////////////////////////
    ///
    model::DataCenter* dataCenter = model::DataCenter::getInstance();

    //////////////////////////////////////////////////////////////////
    /// 切换标签页信号槽实现
    //////////////////////////////////////////////////////////////////
    connect(sessionTabBtn,&QPushButton::clicked,this,&MainWidget::switchTabToSession);
    connect(friendTabBtn,&QPushButton::clicked,this,&MainWidget::switchTabToFriend);
    connect(applyTabBtn,&QPushButton::clicked,this,&MainWidget::switchTabToApply);

    //////////////////////////////////////////////////////////////////
    /// 头像更改
    //////////////////////////////////////////////////////////////////
    connect(dataCenter, &model::DataCenter::changeAvatarDone,this, [=](){
        userBtn->setIcon(dataCenter->getMyself()->userIcon);
    });

    /////////////////////////////////////////////////////////////////
    /// 中间区域 搜索框和 加号 信号槽实现
    /////////////////////////////////////////////////////////////////
    //点击用户头像,弹出个人信息窗口
    connect(userBtn,&QPushButton::clicked,this,[=](){
        SelfInfoWidget* dialog = new SelfInfoWidget(this);
        dialog->exec();
    });

    connect(addBtn,&QPushButton::clicked,this, [=](){
        AddFriendDialog* dialog = new AddFriendDialog(this);
        dialog->exec();
    });

    connect(searchEdit,&QLineEdit::textEdited,this,[=](){
        //获取输入框内容, 清空输入框
        QString text = searchEdit->text();
        searchEdit->clear();

        //创建弹窗
        AddFriendDialog* dialog = new AddFriendDialog(this);
        dialog->setSearchKey(text);
        dialog->exec();
    });

    /////////////////////////////////////////////////////////////////
    /// 会话详情窗口信号槽实现
    /////////////////////////////////////////////////////////////////
    connect(sessionDetailsBtn,&QPushButton::clicked,this,[=](){
        ChatSessionInfo* curChatSession = dataCenter->findChatSessionById(dataCenter->getCurrentChatSessionId());
        if(curChatSession == nullptr)
        {
            LOG() << "显示会话详情失败, 对应的会话不存在";
            return;
        }
        //单聊会话
        if(curChatSession->SessionUserId != "")
        {
            UserInfo* user = dataCenter->findFriendById(curChatSession->SessionUserId);
            if(user == nullptr)
            {
                LOG() << "显示会话详情失败, 对应的用户信息不存在!";
                return;
            }
            SessionDetailWidget* dialog = new SessionDetailWidget(this,*user);
            dialog->exec();
        }
        else
        {
            GroupSessionDetailWidget* dialog = new GroupSessionDetailWidget(this);
            dialog->exec();
        }
    });

    /////////////////////////////////////////////////////////////////
    /// 连接getMyselfDone信号槽处理
    /////////////////////////////////////////////////////////////////

    connect(dataCenter,&DataCenter::getMyselfDone,this, [=](){
        QIcon avatar = dataCenter->getMyself()->userIcon;
        userBtn->setIcon(avatar);
    });
    dataCenter->getMyselfAsync();

    /////////////////////////////////////////////////////////////////
    /// 删除好友信号处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::deleteFriendDone,this,[=](){
        //在dataCenter中已经删除对应数据了, 这里只需要更新即可
        updateFriendList();
        updateChatSessionList();
    });

    /////////////////////////////////////////////////////////////////
    /// 清空右侧消息显示区域处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::clearCurrentSession,this,[=](){
        //清空会话标题
        sessionTitle->setText("");
        //清空消息展示区域
        messageShowArea->clear();
        //设置当前选中会话为空, 因为只要清空右侧消息展示区,就代表该会话原本一定为选中会话
        dataCenter->setCurrentChatSessionId("");
    });

    /////////////////////////////////////////////////////////////////
    /// 申请好友信号处理,单纯提醒一下用户, 申请好友成功即可
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::addFriendApplyDone,this,[=](){
        Toast::showMessage("成功申请好友");
    });

    /////////////////////////////////////////////////////////////////
    /// 收到申请好友的通知处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::receiveFriendApplyDone,this,[=](){
        updateApplyList();
        Toast::showMessage("收到新的好友申请");
    });

    /////////////////////////////////////////////////////////////////
    /// 主动同意添加好友信号处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::acceptFriendApplyDone,this,[=](){
        updateApplyList();
        updateFriendList();
        Toast::showMessage("成功添加好友");
    });

    /////////////////////////////////////////////////////////////////
    /// 收到同意添加好友的通知处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::receiveFriendProcessAccept,this,[=](const UserInfo& userInfo){
       //这里是被通知 "添加好友成功的", 不需要更新好友申请列表, 因为那是对方才能看到的操作
        updateFriendList();
        Toast::showMessage("用户" + userInfo.userName + "通过了你的好友申请!");
    });

    /////////////////////////////////////////////////////////////////
    /// 收到拒绝添加好友的通知处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::receiveFriendProcessReject,this,[=](const UserInfo& userInfo){
        Toast::showMessage("用户" + userInfo.userName + "拒绝了你的好友申请");
    });

    /////////////////////////////////////////////////////////////////
    /// 处理创建群聊完毕的信号
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::createGroupChatSessionDone,this,[=](){
        Toast::showMessage("创建群聊请求已发送");
    });

    /////////////////////////////////////////////////////////////////
    /// 收到创建群聊的通知处理
    /////////////////////////////////////////////////////////////////
    connect(dataCenter,&DataCenter::receiveSessionCreateDone,this,[=](){
        Toast::showMessage("你被拉近了新群聊");
        updateChatSessionList();
    });


}

void MainWidget::initWebsocket()
{
    model::DataCenter* dataCenter = model::DataCenter::getInstance();
    dataCenter->initWebsocket();
}

////////////////////////////////////////////////////////////////////
/// 加载数据相关
////////////////////////////////////////////////////////////////////
void MainWidget::updateFriendList()
{
    // 如果当前选中页不为friendList则不更新
    if(activeTab != FRIEND_LIST)
    {
        return;
    }

    DataCenter* dataCenter = DataCenter::getInstance();
    //清空之前好友列表的显示
    sessionFriendArea->clear();

    for(auto it = dataCenter->getFriendList()->begin();it != dataCenter->getFriendList()->end();++it)
    {
        sessionFriendArea->addSessionFriendItem(SessionFriendItem::FriendItemType,it->userId,it->userIcon,it->userName,it->userSignature);
    }
}

void MainWidget::updateChatSessionList()
{
    if(activeTab != SESSION_LIST)
    {
        return;
    }

    DataCenter* dataCenter = DataCenter::getInstance();
    //清空之前消息列表的显示
    sessionFriendArea->clear();

    for(auto it = dataCenter->getChatSessionList()->begin();it != dataCenter->getChatSessionList()->end();++it)
    {
        switch(it->lastMesssage.messageType)
        {
        case model::MessageType::TEXT_TYPE:
            {
                sessionFriendArea->addSessionFriendItem(SessionFriendItem::SessionItemType,it->SessionId,it->SessionIcon,it->SessionName,it->lastMesssage.messageContent);
            }
        break;
        case model::MessageType::FILE_TYPE:
            {
                sessionFriendArea->addSessionFriendItem(SessionFriendItem::SessionItemType,it->SessionId,it->SessionIcon,it->SessionName,"[文件]");
            }
        break;
        case model::MessageType::IMAGE_TYPE:
            {
                sessionFriendArea->addSessionFriendItem(SessionFriendItem::SessionItemType,it->SessionId,it->SessionIcon,it->SessionName,"[图片]");
            }
        break;
        case model::MessageType::SPEECH_TYPE:
            {
                sessionFriendArea->addSessionFriendItem(SessionFriendItem::SessionItemType,it->SessionId,it->SessionIcon,it->SessionName,"[语音]");
            }
        break;
        default:
            LOG() << " MainWidget::updateChatSessionList() 添加元素失败: 未知消息类型!";
        break;
        }
    }
}

void MainWidget::updateApplyList()
{
    //如果当前页非好友申请页则什么都不做
    if(activeTab != APPLY_LIST)
    {
        return;
    }

    //获取dataCenter对象
    DataCenter* dataCenter = DataCenter::getInstance();

    //清空之前列表显示
    sessionFriendArea->clear();

    //添加元素到显示区域中
    for(auto it = dataCenter->getApplyList()->begin();it != dataCenter->getApplyList()->end();++it)
    {
        sessionFriendArea->addSessionFriendItem(SessionFriendItem::ApplyItemType,it->userId,it->userIcon,it->userName,"");
    }
}

void MainWidget::updateRecentMessage(const QString &chatSessionId)
{
    //获取dataCenter对象
    DataCenter* dataCenter = DataCenter::getInstance();

    //清空之前列表显示
    messageShowArea->clear();

    //添加元素到显示区域中
    for(auto it = dataCenter->getRecentMessages(chatSessionId)->begin();it != dataCenter->getRecentMessages(chatSessionId)->end();++it)
    {
        messageShowArea->addFrontMessage(it->sender.userId != dataCenter->getMyself()->userId,*it);
    }

    //设置会话标题

    ChatSessionInfo * sessionInfo = dataCenter->findChatSessionById(chatSessionId);
    if(!sessionInfo)
    {
        sessionTitle->setText("未知标题");
    }
    else
    {
        sessionTitle->setText(sessionInfo->SessionName);
    }

    //选中会话
    dataCenter->setCurrentChatSessionId(chatSessionId);

    //滚动到末尾
    messageShowArea->srcollToEnd();

}


///////////////////////////////////////////////////////////////////
///切换会话函数
///
void MainWidget::switchTabToSession()
{
    // 1. 记录当前切换到了哪个标签页
    activeTab = SESSION_LIST;
    // 2. 调整图标显示情况, 把会话的按钮图标设为 active, 另外两个图标设为 inactive.
    sessionTabBtn->setIcon(QIcon(":/image/session_active.png"));
    friendTabBtn->setIcon(QIcon(":/image/friend_inactive.png"));
    applyTabBtn->setIcon(QIcon(":/image/apply_inactive.png"));
    // 3. 在主窗口的中间部分, 加载出会话列表数据
    this->loadSessionList();
}

void MainWidget::switchTabToFriend()
{
    // 1. 记录当前切换到了哪个标签页
    activeTab = FRIEND_LIST;
    // 2. 调整图标显示情况, 把会话的按钮图标设为 active, 另外两个图标设为 inactive.
    friendTabBtn->setIcon(QIcon(":/image/friend_active.png"));
    sessionTabBtn->setIcon(QIcon(":/image/session_inactive.png"));
    applyTabBtn->setIcon(QIcon(":/image/apply_inactive.png"));
    // 3. 在主窗口的中间部分, 加载出会话列表数据
    this->loadFriendList();
}

void MainWidget::switchTabToApply()
{
    // 1. 记录当前切换到了哪个标签页
    activeTab = APPLY_LIST;
    // 2. 调整图标显示情况, 把会话的按钮图标设为 active, 另外两个图标设为 inactive.
    applyTabBtn->setIcon(QIcon(":/image/apply_active.png"));
    sessionTabBtn->setIcon(QIcon(":/image/session_inactive.png"));
    friendTabBtn->setIcon(QIcon(":/image/friend_inactive.png"));
    // 3. 在主窗口的中间部分, 加载出会话列表数据
    this->loadApplyList();
}

















